/*
 * clusters.h
 *
 *  Created on: 09/10/2011
 *      Author: Normandia
 *
 *  Funciones para el manejo de clusters
 */

#ifndef CLUSTERS_H_
#define CLUSTERS_H_

#include "filesystem.h"
#include "collections/queue.h"


// Estructura de lista de clusters

typedef struct nodoClusterLibre{
	 uint64_t n_cluster;
	 struct nodoClusterLibre* nextPtr;
} LISTNODELIBRE;

typedef LISTNODELIBRE* NODELIBREPTR;

#define CLUSTER_EOF 0x0FFFFFFF

// Funciones

NODELIBREPTR addNodo(NODELIBREPTR ptr,uint64_t i);
void eliminarNodo(NODELIBREPTR *sPtr,uint64_t i);
NODELIBREPTR ObtenerUltimoNodo(NODELIBREPTR cPtr);
NODELIBREPTR addAListaDeCluster(NODELIBREPTR sPtr,NODELIBREPTR  ptr);
void eliminarClusters(NODELIBREPTR *ptr,uint64_t n_cluster);
void mostrarLista(NODELIBREPTR cPtr);

uint32_t direc_cluster(uint64_t);
void* leerCluster(uint32_t);
void escribirCluster(uint32_t n_cluster, void* buf);
uint32_t obtenerSigCluster(uint32_t n_cluster);
uint32_t obtenerNCluster(uint32_t primer_cluster, uint32_t i);

uint32_t obtenerProxClusterLibre();
uint32_t reservarCluster(uint32_t cluster_ant);


void destructor_cluster(void*);

//NODELIBREPTR ptrListaSectLibre;

#endif /* CLUSTERS_H_ */
